const ProtocolCategory = require('../models/protocolCategory');

// 创建协议分类
exports.createCategory = async (req, res) => {
  try {
    const { name, description, isPublic } = req.body;
    const userId = req.user.id;
    
    // 验证必填字段
    if (!name) {
      return res.status(400).json({ message: '分类名称为必填项' });
    }
    
    // 创建新分类
    const newCategory = await ProtocolCategory.create(
      name, 
      description || '', 
      userId, 
      isPublic || false
    );
    
    // 返回成功消息
    res.status(201).json({
      message: '分类创建成功',
      category: newCategory
    });
  } catch (error) {
    console.error('创建分类失败:', error);
    res.status(500).json({ message: '服务器错误，创建分类失败' });
  }
};

// 获取用户的所有分类
exports.getUserCategories = async (req, res) => {
  try {
    const userId = req.user.id;
    
    // 获取分类列表
    const categories = await ProtocolCategory.findByUserId(userId);
    
    // 返回分类列表
    res.status(200).json({
      categories
    });
  } catch (error) {
    console.error('获取分类失败:', error);
    res.status(500).json({ message: '服务器错误，获取分类失败' });
  }
};

// 获取分类详情
exports.getCategoryById = async (req, res) => {
  try {
    const categoryId = req.params.id;
    
    // 查找分类
    const category = await ProtocolCategory.findById(categoryId);
    if (!category) {
      return res.status(404).json({ message: '分类不存在' });
    }
    
    // 检查权限
    if (!category.is_public && category.user_id !== req.user.id) {
      return res.status(403).json({ message: '无权访问此分类' });
    }
    
    // 返回分类详情
    res.status(200).json({
      category
    });
  } catch (error) {
    console.error('获取分类详情失败:', error);
    res.status(500).json({ message: '服务器错误，获取分类详情失败' });
  }
};

// 更新分类
exports.updateCategory = async (req, res) => {
  try {
    const categoryId = req.params.id;
    const { name, description, isPublic } = req.body;
    
    // 查找分类
    const category = await ProtocolCategory.findById(categoryId);
    if (!category) {
      return res.status(404).json({ message: '分类不存在' });
    }
    
    // 检查权限
    if (category.user_id !== req.user.id) {
      return res.status(403).json({ message: '无权修改此分类' });
    }
    
    // 验证必填字段
    if (!name) {
      return res.status(400).json({ message: '分类名称为必填项' });
    }
    
    // 更新分类
    const updatedCategory = await ProtocolCategory.update(
      categoryId,
      name,
      description || category.description,
      isPublic !== undefined ? isPublic : category.is_public
    );
    
    // 返回成功消息
    res.status(200).json({
      message: '分类更新成功',
      category: updatedCategory
    });
  } catch (error) {
    console.error('更新分类失败:', error);
    res.status(500).json({ message: '服务器错误，更新分类失败' });
  }
};

// 删除分类
exports.deleteCategory = async (req, res) => {
  try {
    const categoryId = req.params.id;
    
    // 查找分类
    const category = await ProtocolCategory.findById(categoryId);
    if (!category) {
      return res.status(404).json({ message: '分类不存在' });
    }
    
    // 检查权限
    if (category.user_id !== req.user.id) {
      return res.status(403).json({ message: '无权删除此分类' });
    }
    
    // 删除分类
    await ProtocolCategory.delete(categoryId);
    
    // 返回成功消息
    res.status(200).json({
      message: '分类删除成功'
    });
  } catch (error) {
    console.error('删除分类失败:', error);
    res.status(500).json({ message: '服务器错误，删除分类失败' });
  }
};
